package com.cjm.algorithm.leetcode;

/**
 * 给你一个数组nums和一个值val， 你需要原地移除所有数值等于val的元素， 并返回移除后
 * 数组的新长度。
 * 不要使用额外的数组空间， 你必须仅使用o(1)额外空间并原地修改输入数组。
 * 元素的顺序可以改变， 你不需要考虑数组中超出新长度后面的元素。
 */
public class RemoveElement27 {
    public static int removeElement(int[] nums, int val) {
        // 这是最后一位数
        int end = nums.length - 1;
        // 这是第一位数
        int num = 0;
        for (int i = 0; i < nums.length && i <= end; i++) {
            // 当是目标值， 将这个数给移除到数组的最后面去
            if (nums[i] == val) {
                // 进行交换
                swap(nums, i, end);
                // 因为当前的元素已经给移动到最后一位了
                // 将当前的最后元素给放到当前的位置
                // 下一次循环， 也要看这个元素是什么样的值
                i --;
                // 现在最后一位， 已经是目标值了， 所以已经最后一位也要变动
                end --;
            }
            num = i;
        }
        return num + 1;
    }
    private static void swap(int[] nums, int star, int end) {
        int temp = nums[star];
        nums[star] = nums[end];
        nums[end] = temp;
    }

    public static void main(String[] args) {
        int[] nums = {0,1,2,2,3,0,4,2};
        int a = removeElement(nums, 2);
        System.err.println("OK");
    }
}
